package teacher.inter;
/*
      -- 3. 接口中的成员
           -- JDK1.7 版本的接口成员
                1. 自定义常量 , 不能有变量
                    例如： public static final int NUM = 10 ;
                    前面的  public static final 可以省略，不写也默认有。
                2. 抽象方法
                     例如：public abstract void eat();
                     前面的 public abstract  可以省略，不写也默认有。

           -- JDK1.8 版本的接口成员     重点
                明确： JDK1.8 版本的接口 = JDK1.7 版本的接口 + 新特性
                  新特性1： 默认方法   重点
                     格式： public default void  eatPlus(){}
                     特点： 可以让子类自由选择是否重写
                  新特性： 静态方法    了解

           -- JDK1.9 版本的接口成员       了解
                明确： JDK1.9 版本的接口 = JDK1.8 版本的接口 + 新特性
                新特性1: 私有方法
                    格式： private void eat(){}
                    作用： 专门为默认方法作功能增强
                新特性2: 私有静态方法
                   格式： private static void eat(){}
                   作用： 专门为静态方法作功能增强
 */
public class InterfaceDemo3 {
    public static void main(String[] args) {

    }
}
// 商业化
interface UserService{
    // 1. 成员变量   静态和非静态
    int NUM = 10 ;
    public static final String NAME = "jack";
    // 2. 成员方法   静态和非静态     不能有
    // 3. 代码块 静态和非静态       UserService
    // 4. 构造方法    UserService
    // 5. 抽象方法
    public abstract void eat();
    void sleep();
    /*// 新特性1：默认方法
    public default void study(){
        System.out.println("我是学习方法");
    }*/
    // void eatPlus();
    public default void  eatPlus(){
        System.out.println("默认功能1");
        eat2();
    }
    private void eat2(){
        System.out.println("默认功能2");
    }

    private static void eat3(){

    }
    // 新特性2：静态方法
    public static void swimming(){
        System.out.println("游泳");
        eat3();
    }
}
interface GoogsService{
    private void eat(){

    }
}

class CompanyA implements UserService{

    @Override
    public void eat() {
        System.out.println("eat");
        //新的功能代码  10万行
    }

    @Override
    public void eatPlus() {
        UserService.super.eatPlus();
    }

    @Override
    public void sleep() {

    }


    public static void fun1(){
        UserService.swimming();
    }
}

class CompanyB implements UserService{

    @Override
    public void eat() {

    }

    @Override
    public void sleep() {

    }
}
